home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / usb / cdc.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  7KB  |  251 lines

  1. /*
  2.  * USB Communications Device Class (CDC) definitions
  3.  *
  4.  * CDC says how to talk to lots of different types of network adapters,
  5.  * notably ethernet adapters and various modems.  It's used mostly with
  6.  * firmware based USB peripherals.
  7.  */
  8.  
  9. #ifndef __LINUX_USB_CDC_H
  10. #define __LINUX_USB_CDC_H
  11.  
  12. #include <linux/types.h>
  13.  
  14. #define USB_CDC_SUBCLASS_ACM            0x02
  15. #define USB_CDC_SUBCLASS_ETHERNET        0x06
  16. #define USB_CDC_SUBCLASS_WHCM            0x08
  17. #define USB_CDC_SUBCLASS_DMM            0x09
  18. #define USB_CDC_SUBCLASS_MDLM            0x0a
  19. #define USB_CDC_SUBCLASS_OBEX            0x0b
  20. #define USB_CDC_SUBCLASS_EEM            0x0c
  21.  
  22. #define USB_CDC_PROTO_NONE            0
  23.  
  24. #define USB_CDC_ACM_PROTO_AT_V25TER        1
  25. #define USB_CDC_ACM_PROTO_AT_PCCA101        2
  26. #define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE    3
  27. #define USB_CDC_ACM_PROTO_AT_GSM        4
  28. #define USB_CDC_ACM_PROTO_AT_3G            5
  29. #define USB_CDC_ACM_PROTO_AT_CDMA        6
  30. #define USB_CDC_ACM_PROTO_VENDOR        0xff
  31.  
  32. #define USB_CDC_PROTO_EEM            7
  33.  
  34. /*-------------------------------------------------------------------------*/
  35.  
  36. /*
  37.  * Class-Specific descriptors ... there are a couple dozen of them
  38.  */
  39.  
  40. #define USB_CDC_HEADER_TYPE        0x00    /* header_desc */
  41. #define USB_CDC_CALL_MANAGEMENT_TYPE    0x01    /* call_mgmt_descriptor */
  42. #define USB_CDC_ACM_TYPE        0x02    /* acm_descriptor */
  43. #define USB_CDC_UNION_TYPE        0x06    /* union_desc */
  44. #define USB_CDC_COUNTRY_TYPE        0x07
  45. #define USB_CDC_NETWORK_TERMINAL_TYPE    0x0a    /* network_terminal_desc */
  46. #define USB_CDC_ETHERNET_TYPE        0x0f    /* ether_desc */
  47. #define USB_CDC_WHCM_TYPE        0x11
  48. #define USB_CDC_MDLM_TYPE        0x12    /* mdlm_desc */
  49. #define USB_CDC_MDLM_DETAIL_TYPE    0x13    /* mdlm_detail_desc */
  50. #define USB_CDC_DMM_TYPE        0x14
  51. #define USB_CDC_OBEX_TYPE        0x15
  52.  
  53. /* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
  54. struct usb_cdc_header_desc {
  55.     __u8    bLength;
  56.     __u8    bDescriptorType;
  57.     __u8    bDescriptorSubType;
  58.  
  59.     __le16    bcdCDC;
  60. } __attribute__ ((packed));
  61.  
  62. /* "Call Management Descriptor" from CDC spec  5.2.3.2 */
  63. struct usb_cdc_call_mgmt_descriptor {
  64.     __u8    bLength;
  65.     __u8    bDescriptorType;
  66.     __u8    bDescriptorSubType;
  67.  
  68.     __u8    bmCapabilities;
  69. #define USB_CDC_CALL_MGMT_CAP_CALL_MGMT        0x01
  70. #define USB_CDC_CALL_MGMT_CAP_DATA_INTF        0x02
  71.  
  72.     __u8    bDataInterface;
  73. } __attribute__ ((packed));
  74.  
  75. /* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */
  76. struct usb_cdc_acm_descriptor {
  77.     __u8    bLength;
  78.     __u8    bDescriptorType;
  79.     __u8    bDescriptorSubType;
  80.  
  81.     __u8    bmCapabilities;
  82. } __attribute__ ((packed));
  83.  
  84. /* capabilities from 5.2.3.3 */
  85.  
  86. #define USB_CDC_COMM_FEATURE    0x01
  87. #define USB_CDC_CAP_LINE    0x02
  88. #define USB_CDC_CAP_BRK    0x04
  89. #define USB_CDC_CAP_NOTIFY    0x08
  90.  
  91. /* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
  92. struct usb_cdc_union_desc {
  93.     __u8    bLength;
  94.     __u8    bDescriptorType;
  95.     __u8    bDescriptorSubType;
  96.  
  97.     __u8    bMasterInterface0;
  98.     __u8    bSlaveInterface0;
  99.     /* ... and there could be other slave interfaces */
  100. } __attribute__ ((packed));
  101.  
  102. /* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
  103. struct usb_cdc_country_functional_desc {
  104.     __u8    bLength;
  105.     __u8    bDescriptorType;
  106.     __u8    bDescriptorSubType;
  107.  
  108.     __u8    iCountryCodeRelDate;
  109.     __le16    wCountyCode0;
  110.     /* ... and there can be a lot of country codes */
  111. } __attribute__ ((packed));
  112.  
  113. /* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
  114. struct usb_cdc_network_terminal_desc {
  115.     __u8    bLength;
  116.     __u8    bDescriptorType;
  117.     __u8    bDescriptorSubType;
  118.  
  119.     __u8    bEntityId;
  120.     __u8    iName;
  121.     __u8    bChannelIndex;
  122.     __u8    bPhysicalInterface;
  123. } __attribute__ ((packed));
  124.  
  125. /* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
  126. struct usb_cdc_ether_desc {
  127.     __u8    bLength;
  128.     __u8    bDescriptorType;
  129.     __u8    bDescriptorSubType;
  130.  
  131.     __u8    iMACAddress;
  132.     __le32    bmEthernetStatistics;
  133.     __le16    wMaxSegmentSize;
  134.     __le16    wNumberMCFilters;
  135.     __u8    bNumberPowerFilters;
  136. } __attribute__ ((packed));
  137.  
  138. /* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */
  139. struct usb_cdc_dmm_desc {
  140.     __u8    bFunctionLength;
  141.     __u8    bDescriptorType;
  142.     __u8    bDescriptorSubtype;
  143.     __u16    bcdVersion;
  144.     __le16    wMaxCommand;
  145. } __attribute__ ((packed));
  146.  
  147. /* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */
  148. struct usb_cdc_mdlm_desc {
  149.     __u8    bLength;
  150.     __u8    bDescriptorType;
  151.     __u8    bDescriptorSubType;
  152.  
  153.     __le16    bcdVersion;
  154.     __u8    bGUID[16];
  155. } __attribute__ ((packed));
  156.  
  157. /* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */
  158. struct usb_cdc_mdlm_detail_desc {
  159.     __u8    bLength;
  160.     __u8    bDescriptorType;
  161.     __u8    bDescriptorSubType;
  162.  
  163.     /* type is associated with mdlm_desc.bGUID */
  164.     __u8    bGuidDescriptorType;
  165.     __u8    bDetailData[0];
  166. } __attribute__ ((packed));
  167.  
  168. /* "OBEX Control Model Functional Descriptor" */
  169. struct usb_cdc_obex_desc {
  170.     __u8    bLength;
  171.     __u8    bDescriptorType;
  172.     __u8    bDescriptorSubType;
  173.  
  174.     __le16    bcdVersion;
  175. } __attribute__ ((packed));
  176.  
  177. /*-------------------------------------------------------------------------*/
  178.  
  179. /*
  180.  * Class-Specific Control Requests (6.2)
  181.  *
  182.  * section 3.6.2.1 table 4 has the ACM profile, for modems.
  183.  * section 3.8.2 table 10 has the ethernet profile.
  184.  *
  185.  * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant,
  186.  * heavily dependent on the encapsulated (proprietary) command mechanism.
  187.  */
  188.  
  189. #define USB_CDC_SEND_ENCAPSULATED_COMMAND    0x00
  190. #define USB_CDC_GET_ENCAPSULATED_RESPONSE    0x01
  191. #define USB_CDC_REQ_SET_LINE_CODING        0x20
  192. #define USB_CDC_REQ_GET_LINE_CODING        0x21
  193. #define USB_CDC_REQ_SET_CONTROL_LINE_STATE    0x22
  194. #define USB_CDC_REQ_SEND_BREAK            0x23
  195. #define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS    0x40
  196. #define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER    0x41
  197. #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER    0x42
  198. #define USB_CDC_SET_ETHERNET_PACKET_FILTER    0x43
  199. #define USB_CDC_GET_ETHERNET_STATISTIC        0x44
  200.  
  201. /* Line Coding Structure from CDC spec 6.2.13 */
  202. struct usb_cdc_line_coding {
  203.     __le32    dwDTERate;
  204.     __u8    bCharFormat;
  205. #define USB_CDC_1_STOP_BITS            0
  206. #define USB_CDC_1_5_STOP_BITS            1
  207. #define USB_CDC_2_STOP_BITS            2
  208.  
  209.     __u8    bParityType;
  210. #define USB_CDC_NO_PARITY            0
  211. #define USB_CDC_ODD_PARITY            1
  212. #define USB_CDC_EVEN_PARITY            2
  213. #define USB_CDC_MARK_PARITY            3
  214. #define USB_CDC_SPACE_PARITY            4
  215.  
  216.     __u8    bDataBits;
  217. } __attribute__ ((packed));
  218.  
  219. /* table 62; bits in multicast filter */
  220. #define    USB_CDC_PACKET_TYPE_PROMISCUOUS        (1 << 0)
  221. #define    USB_CDC_PACKET_TYPE_ALL_MULTICAST    (1 << 1) /* no filter */
  222. #define    USB_CDC_PACKET_TYPE_DIRECTED        (1 << 2)
  223. #define    USB_CDC_PACKET_TYPE_BROADCAST        (1 << 3)
  224. #define    USB_CDC_PACKET_TYPE_MULTICAST        (1 << 4) /* filtered */
  225.  
  226.  
  227. /*-------------------------------------------------------------------------*/
  228.  
  229. /*
  230.  * Class-Specific Notifications (6.3) sent by interrupt transfers
  231.  *
  232.  * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications
  233.  * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS
  234.  * RNDIS also defines its own bit-incompatible notifications
  235.  */
  236.  
  237. #define USB_CDC_NOTIFY_NETWORK_CONNECTION    0x00
  238. #define USB_CDC_NOTIFY_RESPONSE_AVAILABLE    0x01
  239. #define USB_CDC_NOTIFY_SERIAL_STATE        0x20
  240. #define USB_CDC_NOTIFY_SPEED_CHANGE        0x2a
  241.  
  242. struct usb_cdc_notification {
  243.     __u8    bmRequestType;
  244.     __u8    bNotificationType;
  245.     __le16    wValue;
  246.     __le16    wIndex;
  247.     __le16    wLength;
  248. } __attribute__ ((packed));
  249.  
  250. #endif /* __LINUX_USB_CDC_H */
  251.